import axios from 'axios'
import {Message,MessageBox} from 'element-ui'
import {setToken, getToken, removeToken} from '@/utils/auth'

// create an axios instance
const service = axios.create({
    baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
    timeout: 600000,// request timeout
    responseType: 'json',
    headers: {
        "Content-Type": "application/json"
    }
})

// request interceptor
service.interceptors.request.use(
    config => {
        // 处理文件下载请求
        if (config.responseType === 'blob') {
            config.headers['Content-Type'] = 'application/json;charset=UTF-8'
        }
        if (config.url === '/oauth/token') {
            config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
        }
        const token = getToken()
        if (token) {
            config.headers.Authorization = token // 让每个请求携带自定义 token 请根据实际情况自行修改
        }
        config.headers['X-Requested-With'] = 'XMLHttpRequest'
        // 获得图形验证码的接口不用加api前缀
        if (config.url.includes('/code')) {
            config.baseURL = config.baseURL.replace(process.env.VUE_APP_BASE_API,'')
        }
        return config
    },
    error => {
        return Promise.reject(error)
    }
)

// response interceptor
service.interceptors.response.use(res => {
        const {data} = res
        if (data.code == 500) {
            // 因为页面内的请求函数也加了这个，这里再增加就会弹出2次报错
             Message({
                 type: "error",
                 message: data.msg,
                 duration: 5000,
            });
        } else if(data.code == 401){
            removeToken();
            // 弹出警告窗口，此功能需要登录后才能使用，是否前往登录
            MessageBox.confirm('此功能需要登录后才能使用，是否前往登录？', '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning'
              }).then(() => {
                // 用户点击了确定按钮，导航到登录页面
                window.location.href = '/login';
              }).catch(() => {
                // 用户点击了取消按钮，导航到首页
                window.location.href = '/index';
              });
        } else if(data.code == 10001){
            // 提示企业未进行法人人脸认证，请前往微信小程序认证
            MessageBox.confirm('企业未进行法人人脸认证，请前往微信小程序认证', '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning'
              }).then(() => {
                // 用户点击了确定按钮，导航到微信小程序
                // window.location.href = '/transfer';
              }).catch(() => {
                // 用户点击了取消按钮，导航到首页
                // window.location.href = '/index';
              });
        }
        // if (data.code == 401) {
        //     refreshToken().then(res => {
        //         if (data.code == 200) {
        //             setToken(res.access_token)
        //         } else {
        //             removeToken();
        //         }
        //     })
        // }
        return data
    },
    error => {
        if (error.response?.status === 811) {
            setToken('')
            window.location.replace(error.response.data.login_url)
        } else {
            Message({
                showClose: true,
                message: '请求超时',
                type: 'error',
                duration: 5 * 1000
            })
        }
        return Promise.reject(error)
    }
)

export default service
